#pragma once

#include "MessageHeader.h"
#include <string>
#include <memory>

namespace MessageFramework {

/**
 * @brief 消息处理器接口（插件模式）
 *
 * 每个消息类型对应一个Handler实现
 * 设计模式：策略模式 + 工厂模式
 *
 * 实现步骤：
 * 1. 继承IMessageHandler
 * 2. 实现handleMessage()方法
 * 3. 注册到MessageDispatcher
 */
class IMessageHandler {
public:
    virtual ~IMessageHandler() = default;

    /**
     * @brief 处理消息
     *
     * @param message 完整消息（Header + Body）
     * @return 处理结果：
     *   - 0: 成功
     *   - <0: 错误码
     *   - >0: 业务状态码
     */
    virtual int handleMessage(const Message& message) = 0;

    /**
     * @brief 获取Handler支持的消息类型
     */
    virtual std::string getMessageType() const = 0;

    /**
     * @brief 验证消息是否可处理
     */
    virtual bool canHandle(const MessageHeader& header) const {
        return header.messageType == getMessageType();
    }

    /**
     * @brief 获取Handler名称（用于日志）
     */
    virtual std::string getName() const = 0;
};

using MessageHandlerPtr = std::shared_ptr<IMessageHandler>;

} // namespace MessageFramework
